package meng.study.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @Target 被称为 元注解（因为它是对注解进行注解的注解）
 * 
 *         ElementType.PACKAGE 包声明
 * 
 *         ElementType.TYPE 类、接口声明
 * 
 *         ElementType.CONSTRUCTOR 构造方法声明
 * 
 *         ElementType.METHOD 方法声明
 * 
 *         ElementType.FIELD 字段声明
 * 
 *         ElementType.PARAMETER 参数声明
 * 
 * @Retention
 * 
 *            RetentionPolicy.RUNTIME 运行时存在 可以通过反射获取
 * 
 *            RetentionPolicy.CLASS 编译时存在 运行时忽略
 * 
 *            RetentionPolicy.SOURCE 只在源码中显示 编译时丢弃
 * 
 * @Inherited 允许子类继承
 * 
 * @Documented 生成javadoc时会包含该注解
 * 
 * 
 */

@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface MyAnnotation {

	/**
	 * 只使用一个变量是默认为value
	 */
	String value() default "";

	/**
	 * 注解的成员变量的类型是受限的，合法的类型包括原始类型、String、Class、Annotation、Enumeration
	 */
	int num() default 1;

}
